home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Best of MacTutor - S…e Code for Volumes 1 to 5
/
The Best of MacTutor - Source Code for Volume 1-5 (Wayzata Technology)(6031)(1990).bin
/
Source Code
/
#08 (Apr86-May86)
/
Forth April 86
/
Spooler
Wrap
Text File
|
1986-02-06
|
2KB
|
68 lines
( background printer task )
only mac also i/o also forth
: wkg_spool working" spool.####" ;
: cre_spool create" spool.####" ;
: use_spool using" spool.####" ;
variable filecount
variable printlist 400 vallot
variable print.ptr
190 user active.spool
: file# filecount @ ;
: print# print.ptr @ 4 - @ ;
: incr.file file# 1+ filecount ! ;
: incr.print print.ptr @ 4 + print.ptr ! ;
: decr.print print.ptr @ 4 - print.ptr ! ;
: reset.file 1 filecount ! ;
: reset.print printlist print.ptr ! ;
: add.spool ( n - )
printlist print.ptr @ do i 4 - @ i ! -4 +loop incr.print
printlist ! ;
: list.busy print.ptr @ printlist <> ;
11 constant ##offset ( offset from beginning of file routine to file name )
: wkg_spool# ( n - ) <# # # # # #> ( four digits )
['] wkg_spool ##offset + swap cmove ( change file name )
wkg_spool ;
: cre_spool# ( n - ) <# # # # # #>
['] cre_spool ##offset + swap cmove cre_spool ;
: use_spool# ( n - ) <# # # # # #>
['] use_spool ##offset + swap cmove use_spool ;
: new_spool
incr.file file# cre_spool# file# wkg_spool# file# active.spool !
." Your spool file is spool." file# . cr
file output 12 emit ." SPOOL FILE # " file# . cr
console file + output
;
: close_spool console output close-file active.spool @ add.spool ;
: print_file 0 begin dup virtual c@ dup while emit 1+ repeat 2drop ;
: print_spool
list.busy if
print# decr.print use_spool# disk 4 + w@
not if print_file close-file else 10 call sysbeep then
then ;
400 1000 background spool_task
spool_task build
hex
: spool activate
1cc0a mode2 comm2 output
begin print_spool pause again
;
decimal
reset.file reset.print
spool_task spool